import os,sys
sys.path.append(os.pardir)
import numpy as np
from  common.functions import softmax,cross_entropy_error
from common.gradient import numerical_gradient
class simpleNet:
    def __init__(self):
        self.W = np.random.rand(2,3) #用高斯分布进行初始化
    ##计算权重之总和
    def predict(self,x):
        return np.dot(x,self.W)
    ##计算损失函数值
    def loss(self,x,t):
        z = self.predict(x) #计算权重总和
        y = softmax(z) #通过激活函数转换为输出
        loss = cross_entropy_error(y,t)  #通过交叉熵误差计算损失函数值
        return loss


if __name__ == '__main__':
    net = simpleNet()
    x = np.array([0.6,0.9])
    t = np.array([0,0,1]) #正确解标签
    f = lambda w: net.loss(x, t) #权重和损失函数值之间的函数关系
    dw = numerical_gradient(f,net.W) #求解梯度
    print(net.W) #权重
    print(net.loss(x, t))  # 损失函数值
    print(dw) #梯度值



